from django.db import models

# Create your models here.
class BookInfoManager(models.Manager):
    '''图书模型管理器类'''
    # 1.改变原有查询的结果集
    def all(self):
        # 1.调用父类的all方法，获取所有数据
        books = super().all() # QuerySet
        # 2.对books中的数据进行过滤
        books = books.filter(isDelete=False)
        # 返回books
        return books
    def create_book(self, btitle, bpub_date):
        '''添加一本图书'''
        # 1.创建一个图书对象
        # 获取self所在的模型类
        model_class = self.model
        book = model_class()
        # book = BookInfo()
        book.btitle = btitle
        book.bpub_date = bpub_date
        # 2.添加进数据库
        book.save()
        # 3.返回book
        return book


class BookInfo(models.Model):
    btitle=models.CharField(max_length=20)
    bpub_date=models.DateField()
    # 增加新列时，如果数据库中原本表已经数据，要增加default
    # 价格,最大位数为10,小数为2,default 是django的模型类层使用的
    bprice = models.DecimalField(max_digits=10, decimal_places=2, default=0, null=True, blank=True)
    # 阅读量
    bread = models.IntegerField(default=0)
    # 评论量
    bcomment = models.IntegerField(default=0)
    # 删除标记
    isDelete = models.BooleanField(default=False)
    # 重写objects属性,objects和book只能有一个
    objects = BookInfoManager()
    # books=BookInfoManager()
    # 重新str后，打印对象会得到return返回值的内容
    def __str__(self):
        return self.btitle


class HeroInfo(models.Model):
    hname=models.CharField(max_length=20)
    hgender=models.BooleanField(default=False)
    hcomment=models.CharField(max_length=100)
    # on_delete = models.CASCADE作用是：删了被依赖的书，依赖该书的英雄也会被删掉
    # 表中自动生成的是hbook_id,h.hname=b(b是查询出来的书）
    hbook=models.ForeignKey('BookInfo',on_delete=models.CASCADE)
    # 删除标记
    isDelete = models.BooleanField(default=False)

    def __str__(self):
        return self.hname


# 多对多的模型关系
class NewsType(models.Model):
    # 类型名
    type_name = models.CharField(max_length=20)
    # 关系属性，代表类型下面的信息
    type_news = models.ManyToManyField('NewsInfo')

    def __str__(self):
        return self.type_name


# 新闻类
class NewsInfo(models.Model):
    # 新闻标题
    title = models.CharField(max_length=128)
    # 发布时间
    pub_date = models.DateTimeField(auto_now_add=True)
    # 信息内容
    content = models.TextField()


# 员工基本信息类
class EmployeeBasicInfo(models.Model):
    # 姓名
    name = models.CharField(max_length=20)
    # 性别
    gender = models.BooleanField(default=False)
    # 年龄
    age = models.IntegerField()


# 员工详细信息类
class EmployeeDetailInfo(models.Model):
    # 联系地址
    addr = models.CharField(max_length=256)
    # 教育经历
    # 关系属性，代表员工基本信息
    employee_basic = models.OneToOneField('EmployeeBasicInfo',on_delete=models.CASCADE,)


# 自关联的模型类设计
class Areas(models.Model):
    '''地区模型类'''
    # 地区名称
    atitle = models.CharField(max_length=20)
    # 关系属性，代表当前地区的父级地区
    aParent = models.ForeignKey('self', null=True, blank=True,on_delete=models.CASCADE,)